package com.example.tse.rbhttpservice.service.goods;

import com.example.tse.rbhttpservice.service.goods.model.GoodsFavoriteRequest;
import com.example.tse.rbhttpservice.service.goods.model.GoodsFavoriteResponse;
import com.example.tse.rbhttpservice.service.goods.model.GoodsGetVirtualCatInfoRequest;
import com.example.tse.rbhttpservice.service.goods.model.GoodsGetVirtualCatInfoResponse;
import com.example.tse.rbhttpservice.service.goods.model.GoodsGetRequest;
import com.example.tse.rbhttpservice.service.goods.model.GoodsGetResponse;
import com.example.tse.rbhttpservice.service.goods.model.GoodsGetSimilarInfoRequest;
import com.example.tse.rbhttpservice.service.goods.model.GoodsGetSimilarInfoResponse;
import com.example.tse.rbhttpservice.service.goods.model.GoodsGetSimilarListRequest;
import com.example.tse.rbhttpservice.service.goods.model.GoodsGetSimilarListResponse;
import com.example.tse.rbhttpservice.service.goods.model.GoodsGetPriceRequest;
import com.example.tse.rbhttpservice.service.goods.model.GoodsGetPriceResponse;
import com.example.tse.rbhttpservice.service.goods.model.GoodsGetVirtualCatListRequest;
import com.example.tse.rbhttpservice.service.goods.model.GoodsGetVirtualCatListResponse;
import com.example.tse.rbhttpservice.service.goods.model.GoodsGetListRequest;
import com.example.tse.rbhttpservice.service.goods.model.GoodsGetListResponse;
import  com.example.tse.rbhttpservice.service.RemoteServiceListenerT;

/**
*
* @author wliu
*  edit   tse
*/
public interface GoodsService {
/**
* 收藏或取消收藏商品，若传递状态则根据值确定收藏或取消
* @param request
* @param listener
* @return GoodsFavoriteResponse
*/
void favorite(GoodsFavoriteRequest request, RemoteServiceListenerT
        <GoodsFavoriteResponse> listener);

/**
* 获取虚拟分类一级详情
* @param request
* @param listener
* @return GoodsGetVirtualCatInfoResponse
*/
void getVirtualCatInfo(GoodsGetVirtualCatInfoRequest request, RemoteServiceListenerT
        <GoodsGetVirtualCatInfoResponse> listener);

/**
* 获取不同类型的商品详情（类型有普通商品、秒杀商品、新品特卖、即将开售］），只包含商品的基本信息（价格、库存、限购等除外），秒杀商品需要秒杀状态（需要根据状态显示不同按钮）或倒计时，特卖商品中商品价格为特卖专门设置的价格，即将开售商品显示开售提醒按钮，分享的数据是商品第一张图＋商品名称＋固定描述文字＋链接
* @param request
* @param listener
* @return GoodsGetResponse
*/
void get(GoodsGetRequest request, RemoteServiceListenerT
        <GoodsGetResponse> listener);

/**
* 获取独立专场详情
* @param request
* @param listener
* @return GoodsGetSimilarInfoResponse
*/
void getSimilarInfo(GoodsGetSimilarInfoRequest request, RemoteServiceListenerT
        <GoodsGetSimilarInfoResponse> listener);

/**
* 获取独立专场列表
* @param request
* @param listener
* @return GoodsGetSimilarListResponse
*/
void getSimilarList(GoodsGetSimilarListRequest request, RemoteServiceListenerT
        <GoodsGetSimilarListResponse> listener);

/**
* 获取商品价格等信息（含价格、库存、限购数量、货品ID），商品信息对应的商品编号每个货品都需要改变的
* @param request
* @param listener
* @return GoodsGetPriceResponse
*/
void getPrice(GoodsGetPriceRequest request, RemoteServiceListenerT
        <GoodsGetPriceResponse> listener);

/**
* 获取虚拟分类一级列表
* @param request
* @param listener
* @return GoodsGetVirtualCatListResponse
*/
void getVirtualCatList(GoodsGetVirtualCatListRequest request, RemoteServiceListenerT
        <GoodsGetVirtualCatListResponse> listener);

/**
* 获取商品的列表，列表形式有普通商品列表、专场列表，默认排序最新倒叙（p_order最优先排序），特殊appmarketable字段标示当前商品是否可以在app中显示
* @param request
* @param listener
* @return GoodsGetListResponse
*/
void getList(GoodsGetListRequest request, RemoteServiceListenerT
        <GoodsGetListResponse> listener);

    }
